/**
 * 
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 *   
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 * 
 */
package org.jiopi.ibean.bootstrap;

import org.jiopi.framework.core.CentralConsoleKernel;
import org.jiopi.framework.core.loader.CentralConsoleKernelLoader;


/**
 * iBean内核引导程序Loader,使用IbeanKernelClassloader完成内核程序的装载,并返回CentralConsoleKernelLoader对象
 *
 *@since 2010.4.9
 *
 */
public class IBeanCenterConsoleKernelLoader implements CentralConsoleKernelLoader {
	
	protected static volatile CentralConsoleKernel cck;
	
	/**
	 * 
	 * 目的:
	 * 1.够将iBean.jar,jiopi.properties文件分离部署,方便使用,如可以将iBean.jar放在jvm的扩展类库文件夹
	 * 2.实现级联式配置文件设置(不同的Module或应用可根据具体情况独立设置一些配置,如修改work.dir目录)
	 * 3.一个ClassLoader中可以存在多个iBean容器,不同iBean容器都可以看做完全独立的运行环境
	 * 4.每个iBean容器都必须有一个独立的工作目录
	 * 5.尽可能共享下载资源
	 * 
	 * iBean容器的工作目录计算方法:
	 * 约定:ClassLoader层次离SystemClassLoader近的称之为 低级别
	 * 1.最低级别配置文件定义的work.dir:存放下载文件
	 * 2.最低以ContextClassLoader为界限，生成新的 iBean容器
	 * 3.如果将被iBean装载的Module配置了自己的work.dir,则该Module在载入其他Module时,将重新建立一个新的iBean容器与其所在的iBean容器隔离
	 * 
	 * 
	 * 结论:合并 调用栈中的配置文件，高层覆盖低层，以最高层的work.dir为本次调用的work.dir
	 * 用该work.dir检测安装情况
	 * 
	 * 如果没有安装
	 * 用最底层设置的work.dir目录来检测是否已经下载最新的setup.jar文件
	 * 如果有,则运行
	 * 
	 * 安装所需的二级目录:
	 * 1.最底层work.dir  共享下载程序
	 * 2.最高层work.dir  iBean容器临时目录
	 * 
	 * iBean容器所在的ClassLoader 读取的JIOPI版本决定实现的版本
	 * 
	 * 
	 */
	
	/**
	 * 每个iBeanContex 一个ClassLoader用于加载iBean内容
	 */
	public CentralConsoleKernel loadCentralConsoleKernel() {
		//确保初始化完毕,Hotswap 和 资源库
		IBeanInitializer.bootstrapInitialize();
		return cck;
	}

}
